package com.tedu.api;

import org.junit.Test;

/**
 * String  字符串类  不可改变类  BUG
 * 假设：10000000个String类---内存
 * 操作系统发现内存越来越小，会在硬盘上开辟空间--软件会卡
 * 建议：存储字符串类似---String
 *
 * 可变的字符串
 * 可变StringBuilder类  创建字符串随时进行改变【修改、增加、插入】
 * String不可改变的类，频繁创建对象，带来内存损耗
 * StringBuilder类解决内存损耗
 * 创建方式，StringBuilder sb=new StringBuilder();
 *
 * c语言            好处：创建对象，顺便对象进行销毁
 *               例如：定义变量   int a=malloc(4);    开辟4个字节空间
 *                                  a=1;
 *                                  free(a);      清理内存
 * Java语言         好处：创建完对象，不用管，等GC垃圾回收机制，进行回收
 *               例如：定义变量   int a=1；开辟空间，交给GC【使用方便】
 */
public class StringBuilderAPI {
    /**  Java.lang 包下
     * StringBuilder可变的字符串对象类
     * 什么情况下使用，有大量字符串拼接，建议StringBuilder
     * String str=“123”    String s=“456”    str+s出现新对象
     * append()  方法：拼接，等同于String加号意思
     */
    @Test
    public void testStringBuilderAPI(){
        String str="你是我的";  //字面量字符串方式
        //创建一个空的字符串，接收传入字符串【原有字符串上大量拼接】
        StringBuilder sb=new StringBuilder(str);//不会产生新对象
        sb.append("小可爱~");
        System.out.println("原来对象："+sb);
    }
    /**
     * StringBuilder可变的字符串
     * replace(开始坐标，结束坐标，替换字符串)  替换  含头不含尾
     * 作用：可以将字符串中指定范围的内存替换成给定字符串
     */
    @Test
    public void testReplace(){
        StringBuilder sb=new StringBuilder("你就是我的，小可爱~");
        sb.replace(6,9,"小baby");
        System.out.println("SB替换后："+sb);
    }
    /**
     * StringBuilder与StringBuffer---可变字符串类【用法完全一致】
     * append方法，replace方法，insert方法通用
     * insert(插入坐标，给定字符串)方法       返回值String
     * 作用：将给定的字符串插入到当前字符串中
     */
    @Test
    public void testInsert(){
        StringBuffer sb=new StringBuffer("你都是我的小可爱");
        sb=sb.insert(0,"从今以后得每天");
        System.out.println("输入后字符串："+sb);
    }
    @Test
    public void ZuoYe1(){
        String str="HelloJava";
        int byteLength=str.getBytes().length;
        System.out.println("字符串的字节长度为："+byteLength);
    }
    @Test
    public void ZuoYe2(){
        String str="HelloJava";
        char a=str.charAt(4);
        System.out.println("获取的字符是："+a);
    }
    @Test
    public void ZuoYe3(){
        String s="HelloJava";
        int index=s.lastIndexOf("o");
        System.out.println("第一次出现位置："+index);
    }
    @Test
    public void ZuoYe4(){
        String url="HelloJava";
        String s=url.substring(0,5);
        System.out.println("截取后子字符串："+s);
    }
    @Test
    public void ZuoYe5(){
        String url="HelloJava";
        String s=url.substring(5,9);
        System.out.println("截取后子字符串："+s);
    }
    @Test
    public void ZuoYe6(){
        String str=" Hello ";
        str=str.trim();
        System.out.println(str);
    }
    @Test
    public void ZuoYe7(){
        String str="HelloJava";
        char c=str.charAt(5);
        System.out.println("获取的字符是："+c);
    }
    @Test
    public void ZuoYe8(){
        String str="HelloJava";
        str=str.toLowerCase();
        System.out.println("转化为小写："+str);
        str=str.toUpperCase();
        System.out.println("转换为大写："+str);
    }
    //API---split方法---数据下标越界
    //String字符串：重点：替换，截取【需要知道下标】、分割【获取部分子字符串】
    //StringBuilder与StringBuffer【方法完全一致，功能：追加、插入、替换】
    //解决：String类拼接【不要用+】内存溢出--硬盘--程序会卡
    //”123“+”456“+”789“  牵扯拼接，建议SB
    /**  笔试题
     * StringBuilder与StringBuffer有什么区别
     *
     * StringBuilder--JDK1.5--不考虑线程安全【程序效率高】
     * StringBuffer---JDK1.0--考虑线程安全【程序效率低】
     *
     * 其他用法一致！
     */
}
